home *** CD-ROM | disk | FTP | other *** search
/ Pascal Super Library / Pascal Super Library (CW International)(1997).bin / DELPHI32 / AUDIO / MIDICOM2 / README.TXT < prev   
Text File  |  1996-05-19  |  6KB  |  174 lines

  1.  Delphi MIDI I/O Components               Version 2.0b  19 May 1996
  2.  --------------------------               ---------------------------
  3.  
  4.  These components handle low-level MIDI input and output using the 
  5. Windows multimedia MIDI functions. They encapsulate all the nasty
  6. low-level stuff into some intermediate-level components. They support
  7. both short MIDI messages (e.g. note on/off, program change) and long
  8. MIDI messages (e.g. system exclusive, sample dumps).
  9.  
  10.  The components support Delphi 1 and 2. They've been tested in Windows
  11. 3.1, 95, and NT 3.51.
  12.  
  13.  To install the components:
  14.  
  15.  1. Use Delphi's Options|Install Components to install MIDIIN.PAS and
  16.  MIDIOUT.PAS. This should give you MIDI input and output components
  17.  on the Samples tab.
  18.  
  19.  2. Load the project DELPHMID (16-bit version) or DELMID32 (32-bit version)
  20.  and select Compile|Build All to build DELPHMID.DLL or DELMID32.DLL.
  21.  
  22.  3. Load the project MIDIMON and try running it.
  23.  
  24.  There's no formal documentation, but there are lists of properties,
  25. methods, and events in the headers of MIDIIN.PAS and MIDIOUT.PAS.
  26. There's also a couple of example projects: MIDIMON.DPR is a simple
  27. monitor that demonstrates using components created at design time, and
  28. MULTIMON.DPR demonstrates using multiple input and output components
  29. created at runtime.
  30.  
  31.  These components are in the public domain so feel free to produce
  32. any type of program based on them. 
  33.  
  34.  If you need to know more about MIDI you can get a nice package of MIDI
  35. documentation by sending an email message to listserv@auvm.american.edu
  36. with the following lines in the message body:
  37.  
  38.  GET MIDI1_0  MIDISPEC
  39.  GET PRIMER   MIDISPEC
  40.  GET MIDIBNF  MIDISPEC
  41.  GET CTRLTAB  MIDISPEC
  42.  GET STATTAB  MIDISPEC
  43.  GET NOTESTAB MIDISPEC
  44.  GET FILEFMT  MIDISPEC
  45.  GET SDSFMT   MIDISPEC
  46.  GET TIMECODE MIDISPEC
  47.  
  48.  
  49.  
  50. Changes for Delphi 2:
  51. ---------------------
  52.  
  53. 1. The TMidiEvent object has been renamed to TMyMidiEvent to avoid a clash
  54. with the standard Win32 MidiEvent structure and its associated TMidiEvent
  55. record declaration in Delphi. The GetMidiEvent and PutMidiEvent method
  56. names are unchanged.
  57.  
  58. 2. 32-bit DLL name changed to DELMID32.DLL (separate project from
  59. 16-bit DELPHMID.DLL).
  60.  
  61. 3. DLL changed to use stdcall declarations for Win32. Other declaration
  62. changes marked with {$IFDEF WIN32}.
  63.  
  64. 4. Added support for setting the Technology property in TMidiOut,
  65. thanks to Fred Kohler.
  66.  
  67.  
  68. Frequently Asked Questions
  69. --------------------------
  70.  
  71. I've had a lot of email about these components. Thanks to everyone
  72. who sent kind words, code, and bug reports. Here are answers to the
  73. questions that cropped up most often:
  74.  
  75.  Q: How do you load MIDI files and play them using these components?
  76.  
  77.  A: These components don't do that, and the operating system only
  78.     provides support for playing MIDI files from disk. You need to
  79.     write your own code to load MIDI files. There are lots of C++
  80.     examples around on the net, so get cracking!
  81.  
  82.  Q: I don't want to do anything fancy, I just want to output some MIDI notes,
  83.     how do I do that?
  84.  
  85.  A: These components were mainly built for doing System Exclusive input and
  86.     output so if you don't want to use sysex, you don't really need these
  87.     components to do that, although they make managing the device handles
  88.     slightly easier.
  89.  
  90.     To output notes without the MidiOut component:
  91.     ----------------------------------------------
  92.      1. Open the device using an integer device ID to specify which
  93.        device. In the example below devID is an integer from 0 to the no. of
  94.        MIDI devices installed (-1). You can get the number of installed devices
  95.        from midiOutGetNumDevs and the names of the devices using
  96.        midiOutGetDevCaps.
  97.  
  98.          var
  99.             devHandle: HMIDIIN;
  100.             midiRes: MMRESULT;
  101.          begin
  102.             { Callbacks not necessary for output }
  103.             devHandle := midiOutOpen( @devHandle, devID, 0, 0, CALLBACK_NULL );
  104.  
  105.      2. Build up a 32-bit MIDI message value using the MIDI codes defined
  106.         in the MIDI spec (see above for reference).
  107.  
  108.          For example:
  109.  
  110.          theMsg := DWORD(MidiMessage) Or
  111.                 (DWORD(MidiData1) shl 8) Or
  112.                 (DWORD(MidiData2) shl 16);
  113.  
  114.  
  115.      3. Output the message using midiOutShortMsg with the handle from
  116.         midiInOpen.
  117.  
  118.             midiRes := midiOutShortMsg( devHandle, theMsg );
  119.  
  120.      4. Call midiInClose() when you've finished.
  121.  
  122.     
  123.     To output notes using the MidiOutput component:
  124.     -----------------------------------------------
  125.  
  126.      1. Drop the component on a form.
  127.  
  128.      2. Set the component's DeviceID or DeviceName properties to set
  129.         the output device, either manually or with code.
  130.         Use the MidiMapper ID (-1) to output to the Windows MIDI Mapper.
  131.  
  132.      3. Call MidiOutput.Open.
  133.  
  134.      4. Call Midioutput.PutShort(MidiMessage, Data1, Data2).
  135.  
  136.      5. Call MidiOutput.Close when you've finished.
  137.  
  138.  
  139.  Contacting me
  140.  -------------
  141.  
  142.  Contact me by email at dchurcher@cix.compulink.co.uk.
  143.  
  144.  Updated versions of this component may appear on my MIDI software web
  145.  page:
  146.  
  147.     http://www.compulink.co.uk/~greenstone/midisoft.htm
  148.  
  149.  
  150.  
  151.  Revision history
  152.  -----------
  153.  
  154. v2.0b
  155. -----
  156. 1. Added 16-bit DCR files in 16bitres.zip
  157.  
  158. 2. Removed "uses midioutTimerHandler" from delphmid.dpr
  159.  
  160.  
  161. v2.0
  162. ----
  163. 1. Fixed exception on load if the installed MIDI devices were different
  164. from the development machine.
  165.  
  166. 2. Now throws an "Invalid device ID" exception on Create if no MIDI
  167. devices installed on machine.
  168.  
  169. 3. Fixed GPF when SysexBufferCount = 0
  170.  
  171.  
  172.  David Churcher
  173.  April 1996.
  174.